package cn.vehicle.biz;

import cn.vehicle.domains.vo.BasePage;
import cn.vehicle.domains.vo.req.sysUser.*;
import cn.vehicle.domains.vo.res.sysUser.SysUserRes;

public interface SysUserBiz {
    /**
     * 新增系统用户
     *
     * @param req 用户新增请求参数，包含基础信息与初始角色
     */
    void addUser(AddUserReq req);

    /**
     * 更新系统用户信息
     *
     * @param req 用户更新请求参数，需包含用户主键ID
     */
    void updateUser(UpdateUserReq req);

    /**
     * 删除系统用户
     *
     * @param id 用户主键ID
     */
    void deleteUser(Long id);

    /**
     * 根据ID查询用户详情
     *
     * @param id 用户主键ID
     * @return 用户详情信息
     */
    SysUserRes getUserById(Long id);

    /**
     * 分页查询用户列表
     *
     * @param req 查询条件与分页参数
     * @return 分页结果（用户列表）
     */
    BasePage<SysUserRes> list(UserListReq req);

    /**
     * 绑定用户角色
     *
     * <p>支持覆盖式更新，若角色列表为空则清空所有绑定关系。</p>
     *
     * @param req 用户角色绑定请求参数
     */
    void addUserRoles(AddUserRoleReq req);

    /**
     * 用户登录
     *
     * <p>验证用户名与密码，返回用户信息及 Token。</p>
     *
     * @param req 登录请求参数（用户名、密码）
     * @return 登录响应（包含用户基本信息与权限）
     */
    SysUserRes login(UserLoginReq req);
}
